package com.c2b.algorithm.leetcode.base;

/**
 * <a href='https://leetcode.cn/problems/maximum-number-of-balls-in-a-box/'>盒子中小球的最大数量(Maximum Number of Balls in a Box)</a>
 * <p>你在一家生产小球的玩具厂工作，有 n 个小球，编号从 lowLimit 开始，到 highLimit 结束（包括 lowLimit 和 highLimit ，即 n == highLimit - lowLimit + 1）。另有无限数量的盒子，编号从 1 到 infinity 。</p>
 * <p>你的工作是将每个小球放入盒子中，其中盒子的编号应当等于小球编号上每位数字的和。例如，编号 321 的小球应当放入编号 3 + 2 + 1 = 6 的盒子，而编号 10 的小球应当放入编号 1 + 0 = 1 的盒子。</p>
 * <p>给你两个整数 lowLimit 和 highLimit ，返回放有最多小球的盒子中的小球数量。如果有多个盒子都满足放有最多小球，只需返回其中任一盒子的小球数量。</p>
 * <p>
 * <b>示例：</b>
 * <pre>
 * 示例 1：
 *      输入：lowLimit = 1, highLimit = 10
 *      输出：2
 *      解释：
 *          盒子编号：1 2 3 4 5 6 7 8 9 10 11 ...
 *          小球数量：2 1 1 1 1 1 1 1 1 0  0  ...
 *          编号 1 的盒子放有最多小球，小球数量为 2 。
 *
 * 示例 2：
 *      输入：lowLimit = 5, highLimit = 15
 *      输出：2
 *      解释：
 *          盒子编号：1 2 3 4 5 6 7 8 9 10 11 ...
 *          小球数量：1 1 1 1 2 2 1 1 1 0  0  ...
 *          编号 5 和 6 的盒子放有最多小球，每个盒子中的小球数量都是 2 。
 *
 * 示例 3：
 *      输入：lowLimit = 19, highLimit = 28
 *      输出：2
 *      解释：
 *          盒子编号：1 2 3 4 5 6 7 8 9 10 11 12 ...
 *          小球数量：0 1 1 1 1 1 1 1 1 2  0  0  ...
 *          编号 10 的盒子放有最多小球，小球数量为 2 。
 * </pre>
 * </p>
 * <p>
 * <b>提示：</b>
 * <ul>
 *     <li>1 <= lowLimit <= highLimit <= 10^5</li>
 * </ul>
 * </p>
 *
 * @author c2b
 * @since 2024/1/18 14:02
 */
public class LC1742MaximumNumberOfBallsInBox_S {
    static class Solution {
        // highLimit <= 10^5 ,100000 。每位数字的和最大值为 99999时 的 45(即数组长度为46)
        public int countBalls(int lowLimit, int highLimit) {
            int[] cnt = new int[46];
            int res = 0;
            for (int i = lowLimit; i <= highLimit; i++) {
                int box = 0;
                int temp = i;
                while (temp != 0) {
                    box += temp % 10;
                    temp /= 10;
                }
                cnt[box]++;
                res = Math.max(res, cnt[box]);
            }
            return res;
        }
    }

    public static void main(String[] args) {
        Solution solution = new Solution();
        System.out.println(solution.countBalls(1, 10));
        System.out.println(solution.countBalls(5, 15));
        System.out.println(solution.countBalls(19, 28));
    }
}
